<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>Navo Portable Library: 单向环形链表</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body onload='searchBox.OnSelectItem(0);'>
<!-- 制作者 Doxygen 1.7.3 -->
<script type="text/javascript"><!--
var searchBox = new SearchBox("searchBox", "search",false,'搜索');
--></script>
<div id="top">
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">Navo Portable Library&#160;<span id="projectnumber">Ver 1.0.20120827</span></div>
   <div id="projectbrief">Provides generic platform independent facilities.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>首页</span></a></li>
      <li><a href="modules.html"><span>模块</span></a></li>
      <li><a href="annotated.html"><span>数据结构</span></a></li>
      <li><a href="files.html"><span>文件</span></a></li>
      <li id="searchli">
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="搜索" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="summary">
<a href="#nested-classes">数据结构</a> &#124;
<a href="#define-members">宏定义</a> &#124;
<a href="#typedef-members">类型定义</a> &#124;
<a href="#func-members">函数</a>  </div>
  <div class="headertitle">
<h1>单向环形链表</h1>  </div>
<div class="ingroups"><a class="el" href="group___xE9_x93_xBE_xE5_xBC_x8F_xE8_xA1_xA8.html">链式表</a></div></div>
<div class="contents">
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
数据结构</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct____sclnk__node.html">__sclnk_node</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">单向环形链表节点  <a href="struct____sclnk__node.html#_details">更多...</a><br/></td></tr>
<tr><td colspan="2"><h2><a name="define-members"></a>
宏定义</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga1622ab9d53f1304f3bcfc799d8d31d58">SCLNK_HEAD</a>(name)&#160;&#160;&#160;<a class="el" href="struct____sclnk__node.html">sclnk_head</a> name = {&amp;(name)}</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">定义一个名为name的表头，并对其初始化  <a href="#ga1622ab9d53f1304f3bcfc799d8d31d58"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gad06fab6e1450ea947d4b1c959807c4b7">SCLNK_NODE</a>(name)&#160;&#160;&#160;<a class="el" href="struct____sclnk__node.html">sclnk_node</a> name = {&amp;(name)}</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">定义一个名为name的节点，并对其初始化  <a href="#gad06fab6e1450ea947d4b1c959807c4b7"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga016cd16a730d6395636efdda6954852f"></a><!-- doxytag: member="单向环形链表::SCLNK_CHECK_PASS" ref="ga016cd16a730d6395636efdda6954852f" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>SCLNK_CHECK_PASS</b>&#160;&#160;&#160;0</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga764ee4b54abfa4ea6f88107c45753c8f"></a><!-- doxytag: member="单向环形链表::SCLNK_CHECK_LOOP" ref="ga764ee4b54abfa4ea6f88107c45753c8f" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>SCLNK_CHECK_LOOP</b>&#160;&#160;&#160;1</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac1b4a29b9b7056b136a9706fdd169bbd"></a><!-- doxytag: member="单向环形链表::SCLNK_CHECK_NULL" ref="gac1b4a29b9b7056b136a9706fdd169bbd" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>SCLNK_CHECK_NULL</b>&#160;&#160;&#160;2</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c63ec804c220dc76dc32687212c2bb9"></a><!-- doxytag: member="单向环形链表::sclnk_inc" ref="ga3c63ec804c220dc76dc32687212c2bb9" args="(itr)" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga3c63ec804c220dc76dc32687212c2bb9">sclnk_inc</a>(itr)&#160;&#160;&#160;((itr) = (itr)-&gt;next)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">迭代器递增 <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6d3c931e93fa85e8d647bfc2525fc134"></a><!-- doxytag: member="单向环形链表::sclnk_prev_inc" ref="ga6d3c931e93fa85e8d647bfc2525fc134" args="(itr, prev)" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga6d3c931e93fa85e8d647bfc2525fc134">sclnk_prev_inc</a>(itr, prev)&#160;&#160;&#160;((prev) = (itr), sclnk_inc(itr))</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">迭代器递增，并更新前驱迭代器 <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0ae905a556af3efe6a608b57a8ff9c94"></a><!-- doxytag: member="单向环形链表::sclnk_inc_later" ref="ga0ae905a556af3efe6a608b57a8ff9c94" args="(itr)" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga0ae905a556af3efe6a608b57a8ff9c94">sclnk_inc_later</a>(itr)&#160;&#160;&#160;__sclnk_inc_later(itr, &amp;(itr))</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">迭代器后自增 <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga6064f6324b59128b3f2f9b6237e2795f">sclnk_foreach</a>(_begin, _end, fn, type, member)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">正向遍历_begin到_end的节点，并为每一个节点调用回调函数或宏  <a href="#ga6064f6324b59128b3f2f9b6237e2795f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaf21d6d1654af1b15ac7b9d1e314844a2">sclnk_search</a>(head, _begin, _end, equal, var, res, type, member)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">顺序查找区域内的指定节点  <a href="#gaf21d6d1654af1b15ac7b9d1e314844a2"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaa2764d0d3c341ee6915de4c6e50c4081">sclnk_vpush</a>(head, itr)&#160;&#160;&#160;sclnk_push_front(head, sclnk_inc_later(itr))</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">入栈反转  <a href="#gaa2764d0d3c341ee6915de4c6e50c4081"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaee0c8704431a04be07dd7b7a4edc8baf">sclnk_serialize</a>(head, buf, type, member)&#160;&#160;&#160;__sclnk_serialize(head, (char**)(buf), offset_of(type, member))</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">表的序列化  <a href="#gaee0c8704431a04be07dd7b7a4edc8baf"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga458a15d62ffdc2897c44c9d98f2f4ec2">sclnk_deserialize</a>(head, buf, cnt, type, member)&#160;&#160;&#160;__sclnk_deserialize(head, (char**)(buf), cnt, offset_of(type, member))</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">表的反序列化  <a href="#ga458a15d62ffdc2897c44c9d98f2f4ec2"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaa78e42661228ecaf9b0157c0856e10b0">sclnk_sort_insert</a>(head, newly, greater_equal, type, member)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">按升序插入新节点  <a href="#gaa78e42661228ecaf9b0157c0856e10b0"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga7b1159abb4f34066c0ad2a96cc2aecc1">sclnk_is_sorted</a>(_begin, _end, greater_equal, res, type, member)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">判断表是否按序  <a href="#ga7b1159abb4f34066c0ad2a96cc2aecc1"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gabda87e9246d72cfc3d3e872a31344e77">sclnk_bubble_sort</a>(bprev, _begin, _end, greater, type, member)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">对表进行冒泡排序  <a href="#gabda87e9246d72cfc3d3e872a31344e77"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga66b8d85b4f0e05c5ce1b6e9cb204f7e7">sclnk_oddeven_sort</a>(bprev, _begin, _end, greater, type, member)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">对表进行奇偶排序  <a href="#ga66b8d85b4f0e05c5ce1b6e9cb204f7e7"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><b>__sclnk_oddeven_scan</b>(greater, type, member, prev, _start)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga3260083e2d97e61a3f8f35d020a05e34">sclnk_select_sort</a>(bprev, _begin, _end, greater, type, member)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">对表进行选择排序  <a href="#ga3260083e2d97e61a3f8f35d020a05e34"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga19aab19ebb8c624c59b53bc61b2a2f19">sclnk_insert_sort</a>(bprev, _begin, _end, greater_equal, type, member)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">对表进行插入排序  <a href="#ga19aab19ebb8c624c59b53bc61b2a2f19"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="typedef-members"></a>
类型定义</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf0ca87651df00926c16a0d79824c40ca"></a><!-- doxytag: member="单向环形链表::sclnk_node" ref="gaf0ca87651df00926c16a0d79824c40ca" args="" -->
typedef struct <a class="el" href="struct____sclnk__node.html">__sclnk_node</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaf0ca87651df00926c16a0d79824c40ca">sclnk_node</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">节点 <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga94ea68164448a47de7af62b6d8e6aac9"></a><!-- doxytag: member="单向环形链表::sclnk_head" ref="ga94ea68164448a47de7af62b6d8e6aac9" args="" -->
typedef struct <a class="el" href="struct____sclnk__node.html">__sclnk_node</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga94ea68164448a47de7af62b6d8e6aac9">sclnk_head</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">表头 <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac57396cc7f5239b52d30d83fb3d0fd45"></a><!-- doxytag: member="单向环形链表::sclnk_iter" ref="gac57396cc7f5239b52d30d83fb3d0fd45" args="" -->
typedef struct <a class="el" href="struct____sclnk__node.html">__sclnk_node</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gac57396cc7f5239b52d30d83fb3d0fd45">sclnk_iter</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">迭代器 <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf2a36f248bc34b1d960ff647cc806270"></a><!-- doxytag: member="单向环形链表::sclnk_pr1" ref="gaf2a36f248bc34b1d960ff647cc806270" args=")(sclnk_node *)" -->
typedef int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaf2a36f248bc34b1d960ff647cc806270">sclnk_pr1</a> )(<a class="el" href="struct____sclnk__node.html">sclnk_node</a> *)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">单参数回调函数指针 <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3e8dfdfaf04c5f01bf0234f42094d1df"></a><!-- doxytag: member="单向环形链表::sclnk_pr2" ref="ga3e8dfdfaf04c5f01bf0234f42094d1df" args=")(sclnk_node *, sclnk_node *)" -->
typedef int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga3e8dfdfaf04c5f01bf0234f42094d1df">sclnk_pr2</a> )(<a class="el" href="struct____sclnk__node.html">sclnk_node</a> *, <a class="el" href="struct____sclnk__node.html">sclnk_node</a> *)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">双参数回调函数指针 <br/></td></tr>
<tr><td colspan="2"><h2><a name="func-members"></a>
函数</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">NV_API int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga872679837eaeacd2383f86cdbfa3e406">sclnk_check</a> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> *loop_entry)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">判断链表结构是否正常  <a href="#ga872679837eaeacd2383f86cdbfa3e406"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga852e7b04205d953bf29519fb39e40a96">sclnk_init</a> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">初始化表头  <a href="#ga852e7b04205d953bf29519fb39e40a96"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaf12c4deb46369bbaeb098b195b05ced0">sclnk_empty</a> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">判断表是否为空  <a href="#gaf12c4deb46369bbaeb098b195b05ced0"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6d565711e3280e22e026c13ca1234c60"></a><!-- doxytag: member="单向环形链表::__sclnk_singular" ref="ga6d565711e3280e22e026c13ca1234c60" args="(sclnk_node *front, sclnk_node *end)" -->
static int&#160;</td><td class="memItemRight" valign="bottom"><b>__sclnk_singular</b> (<a class="el" href="struct____sclnk__node.html">sclnk_node</a> *front, <a class="el" href="struct____sclnk__node.html">sclnk_node</a> *end)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga12db6bd31db5178a3f01bb1ddd008ad4">sclnk_singular</a> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">判断表是否只有单个节点  <a href="#ga12db6bd31db5178a3f01bb1ddd008ad4"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga98ef86b8ad902392bb2f00d933469677">sclnk_sortable</a> (<a class="el" href="struct____sclnk__node.html">sclnk_iter</a> begin, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> end)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">判断表是否可以排序  <a href="#ga98ef86b8ad902392bb2f00d933469677"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga8ad3457e9c3e3ab59804b27d70410a52">sclnk_serialable</a> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">判断表是否可以序列化  <a href="#ga8ad3457e9c3e3ab59804b27d70410a52"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga6655e61e67c2f0cd0206fdd22af55948">sclnk_link</a> (<a class="el" href="struct____sclnk__node.html">sclnk_iter</a> prev, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> next)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">链接两个节点  <a href="#ga6655e61e67c2f0cd0206fdd22af55948"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga77475af7dbf05e051e3c9ca17b7b9603">sclnk_insert_between</a> (<a class="el" href="struct____sclnk__node.html">sclnk_node</a> *newly, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> prev, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> next)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">在两个节点之间插入一个新节点  <a href="#ga77475af7dbf05e051e3c9ca17b7b9603"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gae9ad1a2d64fe73b2a3413b2c4c18b1b3">sclnk_insert</a> (<a class="el" href="struct____sclnk__node.html">sclnk_iter</a> prev, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> pos, <a class="el" href="struct____sclnk__node.html">sclnk_node</a> *newly)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">插入节点到指定位置  <a href="#gae9ad1a2d64fe73b2a3413b2c4c18b1b3"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga4d8971bd97261a9c6886b68eba5fffc7">sclnk_erase</a> (<a class="el" href="struct____sclnk__node.html">sclnk_iter</a> prev, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> entry)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">擦除节点  <a href="#ga4d8971bd97261a9c6886b68eba5fffc7"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gacba8ca67cb569761bb12e5c6195fd7f6"></a><!-- doxytag: member="单向环形链表::__sclnk_free" ref="gacba8ca67cb569761bb12e5c6195fd7f6" args="(sclnk_iter begin, sclnk_iter end, sclnk_pr1 erase_handler)" -->
NV_API void&#160;</td><td class="memItemRight" valign="bottom"><b>__sclnk_free</b> (<a class="el" href="struct____sclnk__node.html">sclnk_iter</a> begin, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> end, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaf2a36f248bc34b1d960ff647cc806270">sclnk_pr1</a> erase_handler)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gae897271833920bf21c614fe0365698d0">sclnk_erases</a> (<a class="el" href="struct____sclnk__node.html">sclnk_iter</a> bprev, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> begin, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> end, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaf2a36f248bc34b1d960ff647cc806270">sclnk_pr1</a> erase_handler)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">清空区域  <a href="#gae897271833920bf21c614fe0365698d0"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga1b14e4e39781624881131b8b5016a205">sclnk_clear</a> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaf2a36f248bc34b1d960ff647cc806270">sclnk_pr1</a> erase_handler)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">清空表  <a href="#ga1b14e4e39781624881131b8b5016a205"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaa84a7be161740782cf22977fad04db0b">sclnk_push_front</a> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head, <a class="el" href="struct____sclnk__node.html">sclnk_node</a> *newly)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">在表首添加节点  <a href="#gaa84a7be161740782cf22977fad04db0b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga739b0099ea2a0a43019d9e9df676cf2c">sclnk_pop_front</a> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">移除表首节点  <a href="#ga739b0099ea2a0a43019d9e9df676cf2c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga80f9d833c31b2ef13a5ad913e1097cf6">sclnk_splice_between</a> (<a class="el" href="struct____sclnk__node.html">sclnk_iter</a> prev, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> next, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> first_prev, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> first, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> last, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> last_next)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">在两个节点之间插入多个连续节点  <a href="#ga80f9d833c31b2ef13a5ad913e1097cf6"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gae76bde8fdf6caa919f7f0e5d16ecc564">sclnk_splice</a> (<a class="el" href="struct____sclnk__node.html">sclnk_iter</a> prev, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> pos, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> first_prev, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> first, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> last)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">在两个节点之间插入多个连续节点  <a href="#gae76bde8fdf6caa919f7f0e5d16ecc564"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">NV_API size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga4c2368c8b739c616e4a31cdb70e0f109">sclnk_count</a> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">统计表的节点数量  <a href="#ga4c2368c8b739c616e4a31cdb70e0f109"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">NV_API size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga0d3b25cd83d8ae088a5a052be9a19c90">sclnk_distance</a> (<a class="el" href="struct____sclnk__node.html">sclnk_iter</a> first, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> last)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">计算两个节点的迭代距离  <a href="#ga0d3b25cd83d8ae088a5a052be9a19c90"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">NV_API <a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga4f486152712faaff0fd27a48f3ea3e50">sclnk_advance</a> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> cur, size_t dist)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">给迭代器增加一段距离或减小一段距离  <a href="#ga4f486152712faaff0fd27a48f3ea3e50"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga0329e054c0783dac4ce6263ab83d72e1">sclnk_at</a> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head, const size_t index)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">根据正向索引得到迭代器  <a href="#ga0329e054c0783dac4ce6263ab83d72e1"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">NV_API size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaba18db2b0803f2dc314109f95266e92a">sclnk_index_of</a> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> itr)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">计算迭代器的正向索引  <a href="#gaba18db2b0803f2dc314109f95266e92a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga2aecfe697f1a6d22106200dd3c1bc72b">sclnk_node_init</a> (<a class="el" href="struct____sclnk__node.html">sclnk_node</a> *entry)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">初始化节点  <a href="#ga2aecfe697f1a6d22106200dd3c1bc72b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaf8090f7bf0fb7bb21cc80ba7343c1338">sclnk_iter_replace</a> (<a class="el" href="struct____sclnk__node.html">sclnk_node</a> *vprev, <a class="el" href="struct____sclnk__node.html">sclnk_node</a> *victim, <a class="el" href="struct____sclnk__node.html">sclnk_node</a> *newly)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">用新节点替换目标节点  <a href="#gaf8090f7bf0fb7bb21cc80ba7343c1338"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7b02913243530af8f96e534680266be3"></a><!-- doxytag: member="单向环形链表::__sclnk_iter_swap" ref="ga7b02913243530af8f96e534680266be3" args="(sclnk_iter aprev, sclnk_iter a, sclnk_iter anext, sclnk_iter bprev, sclnk_iter b, sclnk_iter bnext)" -->
NV_API void&#160;</td><td class="memItemRight" valign="bottom"><b>__sclnk_iter_swap</b> (<a class="el" href="struct____sclnk__node.html">sclnk_iter</a> aprev, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> a, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> anext, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> bprev, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> b, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> bnext)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaaa9af21e07666138c54ee42af045b928">sclnk_iter_swap</a> (<a class="el" href="struct____sclnk__node.html">sclnk_iter</a> aprev, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> a, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> bprev, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> b)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">交换两个节点  <a href="#gaaa9af21e07666138c54ee42af045b928"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaf5234e26dee066941c79e2af19e5dd54">sclnk_replace</a> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *victim, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> vlast, <a class="el" href="struct____sclnk__node.html">sclnk_head</a> *newly)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">用新表头替换目标表头  <a href="#gaf5234e26dee066941c79e2af19e5dd54"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5ef839b856b32d486a9fc3fa7f1b9a5b"></a><!-- doxytag: member="单向环形链表::__sclnk_swap" ref="ga5ef839b856b32d486a9fc3fa7f1b9a5b" args="(sclnk_iter a, sclnk_iter afront, sclnk_iter alast, sclnk_iter b, sclnk_iter bfront, sclnk_iter blast)" -->
static void&#160;</td><td class="memItemRight" valign="bottom"><b>__sclnk_swap</b> (<a class="el" href="struct____sclnk__node.html">sclnk_iter</a> a, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> afront, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> alast, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> b, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> bfront, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> blast)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga6b4befe4157b371fc3e8d6d9edb9c9ea">sclnk_swap</a> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *a, <a class="el" href="struct____sclnk__node.html">sclnk_head</a> *alast, <a class="el" href="struct____sclnk__node.html">sclnk_head</a> *b, <a class="el" href="struct____sclnk__node.html">sclnk_head</a> *blast)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">交换两个表头  <a href="#ga6b4befe4157b371fc3e8d6d9edb9c9ea"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga26cc730daad81c94fae84637b5ea11c2">sclnk_exist</a> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> itr)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">判断一个节点是否存在于表中  <a href="#ga26cc730daad81c94fae84637b5ea11c2"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga9997297a01740b60bead4d685050dbf1">sclnk_front</a> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">得到表首节点  <a href="#ga9997297a01740b60bead4d685050dbf1"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga462c5c4621c938c4f4b118ddbc5f0963">sclnk_begin</a> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">得到指向正向起始位置的迭代器  <a href="#ga462c5c4621c938c4f4b118ddbc5f0963"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gad3d804bd815b92b46f12e2e1703e5b8c">sclnk_pbegin</a> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">得到指向正向起始位置前驱的迭代器  <a href="#gad3d804bd815b92b46f12e2e1703e5b8c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga8488bd60be74a89d6b7f887f534a5408">sclnk_end</a> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">得到指向正向终止位置的迭代器  <a href="#ga8488bd60be74a89d6b7f887f534a5408"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga1a649a7d0d8926f3ca47111a6f03333f">sclnk_end_of</a> (<a class="el" href="struct____sclnk__node.html">sclnk_iter</a> itr)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">得到当前迭代器的正向终止位置  <a href="#ga1a649a7d0d8926f3ca47111a6f03333f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga3c4203f3e474bfef4705505c047047f2">sclnk_next</a> (<a class="el" href="struct____sclnk__node.html">sclnk_iter</a> itr)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">得到当前节点的后继节点  <a href="#ga3c4203f3e474bfef4705505c047047f2"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2738b356388ef00f12a64018273c327d"></a><!-- doxytag: member="单向环形链表::__sclnk_inc_later" ref="ga2738b356388ef00f12a64018273c327d" args="(sclnk_iter cur, sclnk_iter *p)" -->
static <a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td><td class="memItemRight" valign="bottom"><b>__sclnk_inc_later</b> (<a class="el" href="struct____sclnk__node.html">sclnk_iter</a> cur, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> *p)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2e369ad8719423fa1ee866d4e5358f1f"></a><!-- doxytag: member="单向环形链表::__sclnk_vbegin" ref="ga2e369ad8719423fa1ee866d4e5358f1f" args="(sclnk_head *head, sclnk_iter front)" -->
static <a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td><td class="memItemRight" valign="bottom"><b>__sclnk_vbegin</b> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head, <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> front)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga33ab0148a458bbc3a45d9ab58b3af75b">sclnk_vbegin</a> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">得到用于反转的起始位置的迭代器  <a href="#ga33ab0148a458bbc3a45d9ab58b3af75b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga7c89eff8cd82862599fea6c9eb460836">sclnk_vend</a> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">得到用于反转的终止位置的迭代器  <a href="#ga7c89eff8cd82862599fea6c9eb460836"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">NV_API void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga29a3829d5949bdecbc4d9911d0136c75">sclnk_reverse</a> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">反转表  <a href="#ga29a3829d5949bdecbc4d9911d0136c75"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8b651a2fa7b8a18d8e465de2de325af4"></a><!-- doxytag: member="单向环形链表::__sclnk_serialize" ref="ga8b651a2fa7b8a18d8e465de2de325af4" args="(sclnk_head *head, char **buf, const size_t offset)" -->
NV_API void&#160;</td><td class="memItemRight" valign="bottom"><b>__sclnk_serialize</b> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head, char **buf, const size_t offset)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7588af4441672cdc4e30b3cf2f4e7b23"></a><!-- doxytag: member="单向环形链表::__sclnk_deserialize" ref="ga7588af4441672cdc4e30b3cf2f4e7b23" args="(sclnk_head *head, char **buf, size_t cnt, const size_t offset)" -->
NV_API void&#160;</td><td class="memItemRight" valign="bottom"><b>__sclnk_deserialize</b> (<a class="el" href="struct____sclnk__node.html">sclnk_head</a> *head, char **buf, size_t cnt, const size_t offset)</td></tr>
</table>
<hr/><h2>宏定义文档</h2>
<a class="anchor" id="ga1622ab9d53f1304f3bcfc799d8d31d58"></a><!-- doxytag: member="sclnk.h::SCLNK_HEAD" ref="ga1622ab9d53f1304f3bcfc799d8d31d58" args="(name)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCLNK_HEAD</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">name</td><td>)</td>
          <td>&#160;&#160;&#160;<a class="el" href="struct____sclnk__node.html">sclnk_head</a> name = {&amp;(name)}</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>定义一个名为name的表头，并对其初始化 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">name</td><td>表头名称 </td></tr>
  </table>
  </dd>
</dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00053">53</a>行定义。</p>

</div>
</div>
<a class="anchor" id="gad06fab6e1450ea947d4b1c959807c4b7"></a><!-- doxytag: member="sclnk.h::SCLNK_NODE" ref="gad06fab6e1450ea947d4b1c959807c4b7" args="(name)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCLNK_NODE</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">name</td><td>)</td>
          <td>&#160;&#160;&#160;<a class="el" href="struct____sclnk__node.html">sclnk_node</a> name = {&amp;(name)}</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>定义一个名为name的节点，并对其初始化 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">name</td><td>节点名称 </td></tr>
  </table>
  </dd>
</dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00054">54</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga6064f6324b59128b3f2f9b6237e2795f"></a><!-- doxytag: member="sclnk.h::sclnk_foreach" ref="ga6064f6324b59128b3f2f9b6237e2795f" args="(_begin, _end, fn, type, member)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define sclnk_foreach</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">_begin, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">_end, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">fn, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">type, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">member&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>值:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> {<a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _q_e = (_end);                           \
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _q_f = (_begin);                         \
        <span class="keywordflow">while</span> (_q_f != _q_e) {                              \
            type * _q_t = container_of(_q_f, type, member); \
            _q_f = _q_f-&gt;<a class="code" href="struct____sclnk__node.html#a000a5cc174c66223aacee1b9c6bb90b2" title="后继节点">next</a>;                              \
            fn(_q_t);                                       \
        }                                                   \
    } <span class="keywordflow">while</span> (0)
</pre></div>
<p>正向遍历_begin到_end的节点，并为每一个节点调用回调函数或宏 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">_begin</td><td>起始位置 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">_end</td><td>终止位置 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">fn</td><td>回调函数或宏 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">type</td><td>拥有者类型 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">member</td><td>所在成员名 </td></tr>
  </table>
  </dd>
</dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00688">688</a>行定义。</p>

</div>
</div>
<a class="anchor" id="gaf21d6d1654af1b15ac7b9d1e314844a2"></a><!-- doxytag: member="sclnk.h::sclnk_search" ref="gaf21d6d1654af1b15ac7b9d1e314844a2" args="(head, _begin, _end, equal, var, res, type, member)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define sclnk_search</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">head, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">_begin, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">_end, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">equal, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">var, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">res, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">type, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">member&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>值:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> {\
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _q_e = (_end);                               \
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _q_f = (_begin);                             \
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_head</a>* _q_h = (head);                              \
        (res) = NULL;                                           \
        <span class="keywordflow">while</span> (_q_f != _q_e) {                                  \
            type * _q_cb = container_of(_q_f, type, member);    \
            <span class="keywordflow">if</span> (equal(_q_cb, (val))) {                          \
                (res) = _q_cb;                                  \
                <span class="keywordflow">break</span>;                                          \
            }                                                   \
            _q_f = _q_f-&gt;<a class="code" href="struct____sclnk__node.html#a000a5cc174c66223aacee1b9c6bb90b2" title="后继节点">next</a>;                                  \
        }                                                       \
    } <span class="keywordflow">while</span> (0)
</pre></div>
<p>顺序查找区域内的指定节点 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">head</td><td>表头 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">_begin</td><td>起始位置 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">_end</td><td>终止位置 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">equal</td><td>比较函数或宏。相等时返回1，不相等返回0 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">var</td><td>搜索的键值，常量，变量均可 </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">res</td><td>保存搜索结果的变量，类型是节点指针。结果为NULL表示找不到节点 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">type</td><td>拥有者类型 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">member</td><td>所在成员名 </td></tr>
  </table>
  </dd>
</dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00710">710</a>行定义。</p>

</div>
</div>
<a class="anchor" id="gaa2764d0d3c341ee6915de4c6e50c4081"></a><!-- doxytag: member="sclnk.h::sclnk_vpush" ref="gaa2764d0d3c341ee6915de4c6e50c4081" args="(head, itr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define sclnk_vpush</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">head, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">itr&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;sclnk_push_front(head, sclnk_inc_later(itr))</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>入栈反转 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">head</td><td>表头 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">itr</td><td>迭代器 </td></tr>
  </table>
  </dd>
</dl>
<dl class="user"><dt><b>示例:</b></dt><dd><div class="fragment"><pre class="fragment">    <span class="comment">// 反转表</span>
    <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> ve = <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga7c89eff8cd82862599fea6c9eb460836" title="得到用于反转的终止位置的迭代器">sclnk_vend</a>(&amp;head);
    <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> vi = <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga33ab0148a458bbc3a45d9ab58b3af75b" title="得到用于反转的起始位置的迭代器">sclnk_vbegin</a>(&amp;head);
    <span class="keywordflow">while</span> (vi != ve) {
        <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaa2764d0d3c341ee6915de4c6e50c4081" title="入栈反转">sclnk_vpush</a>(&amp;head, vi);
    }
</pre></div> </dd></dl>
<dl class="see"><dt><b>参见:</b></dt><dd><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga33ab0148a458bbc3a45d9ab58b3af75b" title="得到用于反转的起始位置的迭代器">sclnk_vbegin</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga7c89eff8cd82862599fea6c9eb460836" title="得到用于反转的终止位置的迭代器">sclnk_vend</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga29a3829d5949bdecbc4d9911d0136c75" title="反转表">sclnk_reverse</a> </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00800">800</a>行定义。</p>

</div>
</div>
<a class="anchor" id="gaee0c8704431a04be07dd7b7a4edc8baf"></a><!-- doxytag: member="sclnk.h::sclnk_serialize" ref="gaee0c8704431a04be07dd7b7a4edc8baf" args="(head, buf, type, member)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define sclnk_serialize</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">head, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">buf, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">type, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">member&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;__sclnk_serialize(head, (char**)(buf), offset_of(type, member))</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>表的序列化 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">head</td><td>表头 </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">buf</td><td>序列缓存 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">type</td><td>拥有者类型 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">member</td><td>所在成员名 </td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>注解:</b></dt><dd>函数会遍历整个表，逐个将节点的拥有者地址存入缓存 </dd></dl>
<dl class="user"><dt><b>示例:</b></dt><dd><div class="fragment"><pre class="fragment">    <span class="comment">// 判断是否可以序列化</span>
    <span class="keywordflow">if</span> (<a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga8ad3457e9c3e3ab59804b27d70410a52" title="判断表是否可以序列化">sclnk_serialable</a>(&amp;head)) {
        <a class="code" href="group___xE5_x8D_x95_xE7_xAB_xAF_xE7_xBA_xBF_xE5_xBD_xA2_xE5_xBA_x8F_xE8_xA1_xA8.html#gab7b8f6f20db0f3e5681fd2184b1ae60c" title="type类型表头">slseq_head</a>(DATA*) seq;
        <span class="comment">// 分配序列缓存</span>
        DATA** buf = (DATA**)malloc(sizeof(DATA*) * list_cnt);
        <span class="comment">// 序列化</span>
        <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaee0c8704431a04be07dd7b7a4edc8baf" title="表的序列化">sclnk_serialize</a>(&amp;head, buf, DATA, node);
        <a class="code" href="group___xE5_x8D_x95_xE7_xAB_xAF_xE7_xBA_xBF_xE5_xBD_xA2_xE5_xBA_x8F_xE8_xA1_xA8.html#ga08213d0c7bcf381b466b18e3822c6934" title="初始化序列">SLSEQ_INIT_SERIAL</a>(DATA*, &amp;seq, buf, list_cnt);
        <span class="comment">// 希尔排序</span>
        <a class="code" href="group___xE5_x8D_x95_xE7_xAB_xAF_xE7_xBA_xBF_xE5_xBD_xA2_xE5_xBA_x8F_xE8_xA1_xA8.html#ga197b786747dc3c95744f2bf8060b36ad" title="希尔排序">slseq_shell_sort</a>(DATA*, <a class="code" href="group___xE5_x8D_x95_xE7_xAB_xAF_xE7_xBA_xBF_xE5_xBD_xA2_xE5_xBA_x8F_xE8_xA1_xA8.html#ga2696503718b3292109d395da44c988b6" title="得到指向正向起始位置的迭代器">slseq_begin</a>(&amp;seq), 
            <a class="code" href="group___xE5_x8D_x95_xE7_xAB_xAF_xE7_xBA_xBF_xE5_xBD_xA2_xE5_xBA_x8F_xE8_xA1_xA8.html#ga5b3212d3b18809e193c701f7c6fef755" title="得到指向正向终止位置的迭代器">slseq_end</a>(&amp;seq), DATA_Greater);
        <span class="comment">// 反序列化</span>
        <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga458a15d62ffdc2897c44c9d98f2f4ec2" title="表的反序列化">sclnk_deserialize</a>(&amp;head, buf, list_cnt, DATA, node);
        <span class="comment">// 释放缓存</span>
        free(buf);
    }
</pre></div> </dd></dl>
<dl class="see"><dt><b>参见:</b></dt><dd><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga458a15d62ffdc2897c44c9d98f2f4ec2" title="表的反序列化">sclnk_deserialize</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga8ad3457e9c3e3ab59804b27d70410a52" title="判断表是否可以序列化">sclnk_serialable</a> </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00844">844</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga458a15d62ffdc2897c44c9d98f2f4ec2"></a><!-- doxytag: member="sclnk.h::sclnk_deserialize" ref="ga458a15d62ffdc2897c44c9d98f2f4ec2" args="(head, buf, cnt, type, member)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define sclnk_deserialize</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">head, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">buf, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">cnt, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">type, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">member&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;__sclnk_deserialize(head, (char**)(buf), cnt, offset_of(type, member))</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>表的反序列化 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">head</td><td>表头 </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">buf</td><td>序列缓存 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">cnt</td><td>序列长度 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">type</td><td>拥有者类型 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">member</td><td>所在成员名 </td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>注解:</b></dt><dd>函数会遍历整个序列来还原整个表 </dd></dl>
<dl class="user"><dt><b>示例:</b></dt><dd><div class="fragment"><pre class="fragment">    <span class="comment">// 判断是否可以序列化</span>
    <span class="keywordflow">if</span> (<a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga8ad3457e9c3e3ab59804b27d70410a52" title="判断表是否可以序列化">sclnk_serialable</a>(&amp;head)) {
        <a class="code" href="group___xE5_x8D_x95_xE7_xAB_xAF_xE7_xBA_xBF_xE5_xBD_xA2_xE5_xBA_x8F_xE8_xA1_xA8.html#gab7b8f6f20db0f3e5681fd2184b1ae60c" title="type类型表头">slseq_head</a>(DATA*) seq;
        <span class="comment">// 分配序列缓存</span>
        DATA** buf = (DATA**)malloc(sizeof(DATA*) * list_cnt);
        <span class="comment">// 序列化</span>
        <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaee0c8704431a04be07dd7b7a4edc8baf" title="表的序列化">sclnk_serialize</a>(&amp;head, buf, DATA, node);
        <a class="code" href="group___xE5_x8D_x95_xE7_xAB_xAF_xE7_xBA_xBF_xE5_xBD_xA2_xE5_xBA_x8F_xE8_xA1_xA8.html#ga08213d0c7bcf381b466b18e3822c6934" title="初始化序列">SLSEQ_INIT_SERIAL</a>(DATA*, &amp;seq, buf, list_cnt);
        <span class="comment">// 希尔排序</span>
        <a class="code" href="group___xE5_x8D_x95_xE7_xAB_xAF_xE7_xBA_xBF_xE5_xBD_xA2_xE5_xBA_x8F_xE8_xA1_xA8.html#ga197b786747dc3c95744f2bf8060b36ad" title="希尔排序">slseq_shell_sort</a>(DATA*, <a class="code" href="group___xE5_x8D_x95_xE7_xAB_xAF_xE7_xBA_xBF_xE5_xBD_xA2_xE5_xBA_x8F_xE8_xA1_xA8.html#ga2696503718b3292109d395da44c988b6" title="得到指向正向起始位置的迭代器">slseq_begin</a>(&amp;seq), 
            <a class="code" href="group___xE5_x8D_x95_xE7_xAB_xAF_xE7_xBA_xBF_xE5_xBD_xA2_xE5_xBA_x8F_xE8_xA1_xA8.html#ga5b3212d3b18809e193c701f7c6fef755" title="得到指向正向终止位置的迭代器">slseq_end</a>(&amp;seq), DATA_Greater);
        <span class="comment">// 反序列化</span>
        <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga458a15d62ffdc2897c44c9d98f2f4ec2" title="表的反序列化">sclnk_deserialize</a>(&amp;head, buf, list_cnt, DATA, node);
        <span class="comment">// 释放缓存</span>
        free(buf);
    }
</pre></div> </dd></dl>
<dl class="see"><dt><b>参见:</b></dt><dd><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaee0c8704431a04be07dd7b7a4edc8baf" title="表的序列化">sclnk_serialize</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga8ad3457e9c3e3ab59804b27d70410a52" title="判断表是否可以序列化">sclnk_serialable</a> </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00877">877</a>行定义。</p>

</div>
</div>
<a class="anchor" id="gaa78e42661228ecaf9b0157c0856e10b0"></a><!-- doxytag: member="sclnk.h::sclnk_sort_insert" ref="gaa78e42661228ecaf9b0157c0856e10b0" args="(head, newly, greater_equal, type, member)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define sclnk_sort_insert</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">head, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">newly, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">greater_equal, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">type, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">member&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>值:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> {\
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_n = (newly);                              \
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_head</a>* _k_h = (head);                              \
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_j = _k_h;                                 \
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_i = _k_h-&gt;<a class="code" href="struct____sclnk__node.html#a000a5cc174c66223aacee1b9c6bb90b2" title="后继节点">next</a>;                           \
        <span class="keywordflow">while</span> (_k_i != _k_h) {                                  \
            type * _k_pi = container_of(_k_i, type, member);    \
            type * _k_pn = container_of(_k_n, type, member);    \
            <span class="keywordflow">if</span> (greater_equal(_k_pi, _k_pn))                    \
                <span class="keywordflow">break</span>;                                          \
            _k_j = _k_i;                                        \
            _k_i = _k_i-&gt;<a class="code" href="struct____sclnk__node.html#a000a5cc174c66223aacee1b9c6bb90b2" title="后继节点">next</a>;                                  \
        }                                                       \
        <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gae9ad1a2d64fe73b2a3413b2c4c18b1b3" title="插入节点到指定位置">sclnk_insert</a>(_k_j, _k_i, _k_n);                         \
    } <span class="keywordflow">while</span> (0)
</pre></div>
<p>按升序插入新节点 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">head</td><td>表头 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">newly</td><td>新节点 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">greater_equal</td><td>比较函数或宏， 升序:((*i)-&gt;x &gt;= (*j)-&gt;x) 降序:((*i)-&gt;x &lt;= (*j)-&gt;x) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">type</td><td>拥有者类型 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">member</td><td>所在成员名 </td></tr>
  </table>
  </dd>
</dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00891">891</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga7b1159abb4f34066c0ad2a96cc2aecc1"></a><!-- doxytag: member="sclnk.h::sclnk_is_sorted" ref="ga7b1159abb4f34066c0ad2a96cc2aecc1" args="(_begin, _end, greater_equal, res, type, member)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define sclnk_is_sorted</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">_begin, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">_end, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">greater_equal, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">res, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">type, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">member&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>值:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> {\
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_e = (_end);                               \
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_i = (_begin);                             \
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_j = _k_i-&gt;<a class="code" href="struct____sclnk__node.html#a000a5cc174c66223aacee1b9c6bb90b2" title="后继节点">next</a>;                           \
        (res) = 1;                                              \
        <span class="keywordflow">while</span> (_k_j != _k_e) {                                  \
            type * _k_pi = container_of(_k_i, type, member);    \
            type * _k_pj = container_of(_k_j, type, member);    \
            <span class="keywordflow">if</span> (!(greater_equal(_k_pj, _k_pi))) {               \
                (res) = 0;                                      \
                <span class="keywordflow">break</span>;                                          \
            }                                                   \
            _k_i = _k_j;                                        \
            _k_j = _k_j-&gt;<a class="code" href="struct____sclnk__node.html#a000a5cc174c66223aacee1b9c6bb90b2" title="后继节点">next</a>;                                  \
        }                                                       \
    } <span class="keywordflow">while</span> (0)
</pre></div>
<p>判断表是否按序 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">_begin</td><td>起始位置 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">_end</td><td>终止位置 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">greater_equal</td><td>比较函数或宏， 升序:((*i)-&gt;x &gt;= (*j)-&gt;x) 降序:((*i)-&gt;x &lt;= (*j)-&gt;x) </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">res</td><td>保存输出结果的变量 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">type</td><td>拥有者类型 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">member</td><td>所在成员名 </td></tr>
  </table>
  </dd>
</dl>
<dl class="see"><dt><b>参见:</b></dt><dd><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gabda87e9246d72cfc3d3e872a31344e77" title="对表进行冒泡排序">sclnk_bubble_sort</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga66b8d85b4f0e05c5ce1b6e9cb204f7e7" title="对表进行奇偶排序">sclnk_oddeven_sort</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga3260083e2d97e61a3f8f35d020a05e34" title="对表进行选择排序">sclnk_select_sort</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga19aab19ebb8c624c59b53bc61b2a2f19" title="对表进行插入排序">sclnk_insert_sort</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga98ef86b8ad902392bb2f00d933469677" title="判断表是否可以排序">sclnk_sortable</a> </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00921">921</a>行定义。</p>

</div>
</div>
<a class="anchor" id="gabda87e9246d72cfc3d3e872a31344e77"></a><!-- doxytag: member="sclnk.h::sclnk_bubble_sort" ref="gabda87e9246d72cfc3d3e872a31344e77" args="(bprev, _begin, _end, greater, type, member)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define sclnk_bubble_sort</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">bprev, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">_begin, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">_end, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">greater, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">type, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">member&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>值:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> {\
        <span class="keywordtype">int</span> _k_pc = 1;                                              \
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_e = (_end);                                   \
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_i = (_begin);                                 \
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_ip = (bprev);                                 \
        <span class="keywordflow">for</span> (; _k_pc &amp;&amp; _k_i != _k_e; _k_i = _k_i-&gt;<a class="code" href="struct____sclnk__node.html#a000a5cc174c66223aacee1b9c6bb90b2" title="后继节点">next</a>) {          \
            <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_jp = _k_i;                                \
            <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_j = _k_i-&gt;<a class="code" href="struct____sclnk__node.html#a000a5cc174c66223aacee1b9c6bb90b2" title="后继节点">next</a>;                           \
            <span class="keywordflow">for</span> (_k_pc = 0; _k_j != _k_e; _k_j = _k_j-&gt;<a class="code" href="struct____sclnk__node.html#a000a5cc174c66223aacee1b9c6bb90b2" title="后继节点">next</a>) {      \
                type * _k_pi = container_of(_k_i, type, member);    \
                type * _k_pj = container_of(_k_j, type, member);    \
                <span class="keywordflow">if</span> (greater(_k_pi, _k_pj)) {                        \
                    <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_t = _k_i;                         \
                    _k_i = _k_j;                                    \
                    _k_j = _k_t;                                    \
                    <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaaa9af21e07666138c54ee42af045b928" title="交换两个节点">sclnk_iter_swap</a>(_k_jp, _k_i, _k_ip, _k_j);      \
                    _k_pc = 1;                                      \
                }                                                   \
                _k_jp = _k_j;                                       \
            }                                                       \
            _k_ip = _k_i;                                           \
        }                                                           \
    } <span class="keywordflow">while</span> (0)
</pre></div>
<p>对表进行冒泡排序 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bprev</td><td>起始位置前驱 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">_begin</td><td>起始位置 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">_end</td><td>终止位置 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">greater</td><td>比较函数或宏 升序:((*i)-&gt;x &gt; (*j)-&gt;x) 降序:((*i)-&gt;x &lt; (*j)-&gt;x) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">type</td><td>拥有者类型 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">member</td><td>所在成员名 </td></tr>
  </table>
  </dd>
</dl>
<dl class="see"><dt><b>参见:</b></dt><dd><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga98ef86b8ad902392bb2f00d933469677" title="判断表是否可以排序">sclnk_sortable</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga7b1159abb4f34066c0ad2a96cc2aecc1" title="判断表是否按序">sclnk_is_sorted</a> </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00957">957</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga66b8d85b4f0e05c5ce1b6e9cb204f7e7"></a><!-- doxytag: member="sclnk.h::sclnk_oddeven_sort" ref="ga66b8d85b4f0e05c5ce1b6e9cb204f7e7" args="(bprev, _begin, _end, greater, type, member)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define sclnk_oddeven_sort</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">bprev, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">_begin, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">_end, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">greater, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">type, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">member&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>值:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> {\
        <span class="keywordtype">int</span> _k_pc = 1;                                                      \
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_e = (_end);                                           \
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_f = (_begin);                                         \
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_p = (bprev);                                          \
        <span class="keywordflow">while</span> (_k_pc) {                                                     \
            _k_pc = 0;                                                      \
            _k_f = _k_p-&gt;<a class="code" href="struct____sclnk__node.html#a000a5cc174c66223aacee1b9c6bb90b2" title="后继节点">next</a>;                                              \
            __sclnk_oddeven_scan(greater, type, member, _k_p, _k_f);        \
            __sclnk_oddeven_scan(greater, type, member, _k_f, _k_f-&gt;<a class="code" href="struct____sclnk__node.html#a000a5cc174c66223aacee1b9c6bb90b2" title="后继节点">next</a>);  \
        }                                                                   \
    } <span class="keywordflow">while</span> (0)
</pre></div>
<p>对表进行奇偶排序 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bprev</td><td>起始位置前驱 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">_begin</td><td>起始位置 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">_end</td><td>终止位置 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">greater</td><td>比较函数或宏 升序:((*i)-&gt;x &gt; (*j)-&gt;x) 降序:((*i)-&gt;x &lt; (*j)-&gt;x) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">type</td><td>拥有者类型 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">member</td><td>所在成员名 </td></tr>
  </table>
  </dd>
</dl>
<dl class="see"><dt><b>参见:</b></dt><dd><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga98ef86b8ad902392bb2f00d933469677" title="判断表是否可以排序">sclnk_sortable</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga7b1159abb4f34066c0ad2a96cc2aecc1" title="判断表是否按序">sclnk_is_sorted</a> </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00994">994</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga87f1c1871c1e2d6af2d2a6173edc54bb"></a><!-- doxytag: member="sclnk.h::__sclnk_oddeven_scan" ref="ga87f1c1871c1e2d6af2d2a6173edc54bb" args="(greater, type, member, prev, _start)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define __sclnk_oddeven_scan</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">greater, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">type, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">member, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">prev, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">_start&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>值:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> {\
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_ip = prev;                                \
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_i = _start;                               \
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_jp = _k_i;                                \
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_j = _k_i-&gt;<a class="code" href="struct____sclnk__node.html#a000a5cc174c66223aacee1b9c6bb90b2" title="后继节点">next</a>;                           \
        <span class="keywordflow">while</span> (_k_j != _k_e &amp;&amp; _k_i != _k_e) {                  \
            type * _k_pi = container_of(_k_i, type, member);    \
            type * _k_pj = container_of(_k_j, type, member);    \
            <span class="keywordflow">if</span> (greater(_k_pi, _k_pj)) {                        \
                <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_t = _k_i;                         \
                _k_i = _k_j;                                    \
                _k_j = _k_t;                                    \
                <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaaa9af21e07666138c54ee42af045b928" title="交换两个节点">sclnk_iter_swap</a>(_k_jp, _k_i, _k_ip, _k_j);      \
                _k_pc = 1;                                      \
            }                                                   \
            _k_ip = _k_j;                                       \
            _k_i = _k_j-&gt;<a class="code" href="struct____sclnk__node.html#a000a5cc174c66223aacee1b9c6bb90b2" title="后继节点">next</a>;                                  \
            _k_jp = _k_i;                                       \
            _k_j = _k_i-&gt;<a class="code" href="struct____sclnk__node.html#a000a5cc174c66223aacee1b9c6bb90b2" title="后继节点">next</a>;                                  \
        }                                                       \
    } <span class="keywordflow">while</span> (0)
</pre></div>
<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l01007">1007</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga3260083e2d97e61a3f8f35d020a05e34"></a><!-- doxytag: member="sclnk.h::sclnk_select_sort" ref="ga3260083e2d97e61a3f8f35d020a05e34" args="(bprev, _begin, _end, greater, type, member)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define sclnk_select_sort</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">bprev, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">_begin, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">_end, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">greater, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">type, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">member&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>对表进行选择排序 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bprev</td><td>起始位置前驱 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">_begin</td><td>起始位置 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">_end</td><td>终止位置 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">greater</td><td>比较函数或宏 升序:((*i)-&gt;x &gt; (*j)-&gt;x) 降序:((*i)-&gt;x &lt; (*j)-&gt;x) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">type</td><td>拥有者类型 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">member</td><td>所在成员名 </td></tr>
  </table>
  </dd>
</dl>
<dl class="see"><dt><b>参见:</b></dt><dd><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga98ef86b8ad902392bb2f00d933469677" title="判断表是否可以排序">sclnk_sortable</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga7b1159abb4f34066c0ad2a96cc2aecc1" title="判断表是否按序">sclnk_is_sorted</a> </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l01042">1042</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga19aab19ebb8c624c59b53bc61b2a2f19"></a><!-- doxytag: member="sclnk.h::sclnk_insert_sort" ref="ga19aab19ebb8c624c59b53bc61b2a2f19" args="(bprev, _begin, _end, greater_equal, type, member)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define sclnk_insert_sort</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">bprev, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">_begin, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">_end, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">greater_equal, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">type, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">member&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>值:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> {<a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_e = (_end);                                   \
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_f = (_begin);                                 \
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_p = (bprev);                                  \
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_ip = _k_f;                                    \
        <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_i = _k_f-&gt;<a class="code" href="struct____sclnk__node.html#a000a5cc174c66223aacee1b9c6bb90b2" title="后继节点">next</a>;                               \
        <span class="keywordflow">for</span> (; _k_i != _k_e; _k_i = _k_i-&gt;<a class="code" href="struct____sclnk__node.html#a000a5cc174c66223aacee1b9c6bb90b2" title="后继节点">next</a>) {                   \
            type * _k_pi = container_of(_k_i, type, member);        \
            <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_jp = _k_p;                                \
            <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_j = _k_p-&gt;<a class="code" href="struct____sclnk__node.html#a000a5cc174c66223aacee1b9c6bb90b2" title="后继节点">next</a>;                           \
            <span class="keywordflow">while</span> (_k_j != _k_i) {                                  \
                type * _k_pj = container_of(_k_j, type, member);    \
                <span class="keywordflow">if</span> (greater_equal(_k_pj, _k_pi)) {                  \
                    <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> _k_t = _k_i;                         \
                    _k_i = _k_ip;                                   \
                    <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga4d8971bd97261a9c6886b68eba5fffc7" title="擦除节点">sclnk_erase</a>(_k_ip, _k_t);                       \
                    <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gae9ad1a2d64fe73b2a3413b2c4c18b1b3" title="插入节点到指定位置">sclnk_insert</a>(_k_jp, _k_j, _k_t);                \
                    <span class="keywordflow">break</span>;                                          \
                }                                                   \
                _k_jp = _k_j;                                       \
                _k_j = _k_j-&gt;<a class="code" href="struct____sclnk__node.html#a000a5cc174c66223aacee1b9c6bb90b2" title="后继节点">next</a>;                                  \
            }                                                       \
            _k_ip = _k_i;                                           \
        }                                                           \
    } <span class="keywordflow">while</span> (0)
</pre></div>
<p>对表进行插入排序 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bprev</td><td>起始位置前驱 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">_begin</td><td>起始位置 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">_end</td><td>终止位置 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">greater</td><td>比较函数或宏 升序:((*i)-&gt;x &gt; (*j)-&gt;x) 降序:((*i)-&gt;x &lt; (*j)-&gt;x) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">type</td><td>拥有者类型 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">member</td><td>所在成员名 </td></tr>
  </table>
  </dd>
</dl>
<dl class="see"><dt><b>参见:</b></dt><dd><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga98ef86b8ad902392bb2f00d933469677" title="判断表是否可以排序">sclnk_sortable</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga7b1159abb4f34066c0ad2a96cc2aecc1" title="判断表是否按序">sclnk_is_sorted</a> </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l01086">1086</a>行定义。</p>

</div>
</div>
<hr/><h2>函数文档</h2>
<a class="anchor" id="ga872679837eaeacd2383f86cdbfa3e406"></a><!-- doxytag: member="sclnk.h::sclnk_check" ref="ga872679837eaeacd2383f86cdbfa3e406" args="(sclnk_head *head, sclnk_iter *loop_entry)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">NV_API int sclnk_check </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>head</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a> *&#160;</td>
          <td class="paramname"><em>loop_entry</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>判断链表结构是否正常 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">head</td><td>表头 </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">loop_entry</td><td>指向保存环路入口的迭代器，可以为NULL。 若为空，则不返回环路入口； 若不为空且仅有环路问题，则函数将环路入口保存到loop_entry </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>返回:</b></dt><dd>int 返回结果 </dd></dl>
<dl><dt><b>返回值:</b></dt><dd>
  <table class="retval">
    <tr><td class="paramname">SCLNK_CHECK_PASS</td><td>0 正常 </td></tr>
    <tr><td class="paramname">SCLNK_CHECK_LOOP</td><td>1 有非法环路 </td></tr>
    <tr><td class="paramname">SCLNK_CHECK_NULL</td><td>2 有节点指向NULL </td></tr>
  </table>
  </dd>
</dl>

<p>在文件<a class="el" href="sclnk_8c_source.html">sclnk.c</a>第<a class="el" href="sclnk_8c_source.html#l00021">21</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga852e7b04205d953bf29519fb39e40a96"></a><!-- doxytag: member="sclnk.h::sclnk_init" ref="ga852e7b04205d953bf29519fb39e40a96" args="(sclnk_head *head)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline void sclnk_init </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>head</em></td><td>)</td>
          <td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>初始化表头 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">head</td><td>目标表头 </td></tr>
  </table>
  </dd>
</dl>
<dl class="user"><dt><b>示例:</b></dt><dd><div class="fragment"><pre class="fragment">    <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_head</a> head;
    <span class="comment">// 初始化</span>
    <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga852e7b04205d953bf29519fb39e40a96" title="初始化表头">sclnk_init</a>(&amp;head);
</pre></div> </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00094">94</a>行定义。</p>

</div>
</div>
<a class="anchor" id="gaf12c4deb46369bbaeb098b195b05ced0"></a><!-- doxytag: member="sclnk.h::sclnk_empty" ref="gaf12c4deb46369bbaeb098b195b05ced0" args="(sclnk_head *head)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline int sclnk_empty </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>head</em></td><td>)</td>
          <td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>判断表是否为空 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">head</td><td>表头 </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>返回:</b></dt><dd>int 返回结果 </dd></dl>
<dl><dt><b>返回值:</b></dt><dd>
  <table class="retval">
    <tr><td class="paramname">1</td><td>真 </td></tr>
    <tr><td class="paramname">0</td><td>假 </td></tr>
  </table>
  </dd>
</dl>
<dl class="user"><dt><b>示例:</b></dt><dd><div class="fragment"><pre class="fragment">    <span class="keywordflow">if</span> (!<a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaf12c4deb46369bbaeb098b195b05ced0" title="判断表是否为空">sclnk_empty</a>(&amp;head)) {
        ......
    }
</pre></div> </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00113">113</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga12db6bd31db5178a3f01bb1ddd008ad4"></a><!-- doxytag: member="sclnk.h::sclnk_singular" ref="ga12db6bd31db5178a3f01bb1ddd008ad4" args="(sclnk_head *head)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline int sclnk_singular </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>head</em></td><td>)</td>
          <td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>判断表是否只有单个节点 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">head</td><td>表头 </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>返回:</b></dt><dd>int 返回结果 </dd></dl>
<dl><dt><b>返回值:</b></dt><dd>
  <table class="retval">
    <tr><td class="paramname">1</td><td>真 </td></tr>
    <tr><td class="paramname">0</td><td>假 </td></tr>
  </table>
  </dd>
</dl>
<dl class="user"><dt><b>示例:</b></dt><dd><div class="fragment"><pre class="fragment">    <span class="keywordflow">if</span> (<a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga12db6bd31db5178a3f01bb1ddd008ad4" title="判断表是否只有单个节点">sclnk_singular</a>(&amp;head)) {
        ......
    }
</pre></div> </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00137">137</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga98ef86b8ad902392bb2f00d933469677"></a><!-- doxytag: member="sclnk.h::sclnk_sortable" ref="ga98ef86b8ad902392bb2f00d933469677" args="(sclnk_iter begin, sclnk_iter end)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline int sclnk_sortable </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>begin</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>end</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>判断表是否可以排序 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">begin</td><td>起始位置 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">end</td><td>结束位置 </td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>注解:</b></dt><dd>即判断是否至少有两个节点 </dd></dl>
<dl class="return"><dt><b>返回:</b></dt><dd>int 返回结果 </dd></dl>
<dl><dt><b>返回值:</b></dt><dd>
  <table class="retval">
    <tr><td class="paramname">1</td><td>真 </td></tr>
    <tr><td class="paramname">0</td><td>假 </td></tr>
  </table>
  </dd>
</dl>
<dl class="user"><dt><b>示例:</b></dt><dd><div class="fragment"><pre class="fragment">    <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> begin = <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga462c5c4621c938c4f4b118ddbc5f0963" title="得到指向正向起始位置的迭代器">sclnk_begin</a>(&amp;head);
    <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> end = <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga8488bd60be74a89d6b7f887f534a5408" title="得到指向正向终止位置的迭代器">sclnk_end</a>(&amp;head);
    <span class="comment">// 判断是否可以排序</span>
    <span class="keywordflow">if</span> (<a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga98ef86b8ad902392bb2f00d933469677" title="判断表是否可以排序">sclnk_sortable</a>(begin, end)) {
        <span class="comment">// 插入排序</span>
        <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga19aab19ebb8c624c59b53bc61b2a2f19" title="对表进行插入排序">sclnk_insert_sort</a>(begin, end, DATA_GreaterEqual, DATA, node);
    }
</pre></div> </dd></dl>
<dl class="see"><dt><b>参见:</b></dt><dd><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gabda87e9246d72cfc3d3e872a31344e77" title="对表进行冒泡排序">sclnk_bubble_sort</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga66b8d85b4f0e05c5ce1b6e9cb204f7e7" title="对表进行奇偶排序">sclnk_oddeven_sort</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga3260083e2d97e61a3f8f35d020a05e34" title="对表进行选择排序">sclnk_select_sort</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga19aab19ebb8c624c59b53bc61b2a2f19" title="对表进行插入排序">sclnk_insert_sort</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga7b1159abb4f34066c0ad2a96cc2aecc1" title="判断表是否按序">sclnk_is_sorted</a> </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00164">164</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga8ad3457e9c3e3ab59804b27d70410a52"></a><!-- doxytag: member="sclnk.h::sclnk_serialable" ref="ga8ad3457e9c3e3ab59804b27d70410a52" args="(sclnk_head *head)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline int sclnk_serialable </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>head</em></td><td>)</td>
          <td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>判断表是否可以序列化 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">head</td><td>表头 </td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>注解:</b></dt><dd>即判断是否至少有一个节点 </dd></dl>
<dl class="return"><dt><b>返回:</b></dt><dd>int 返回结果 </dd></dl>
<dl><dt><b>返回值:</b></dt><dd>
  <table class="retval">
    <tr><td class="paramname">1</td><td>真 </td></tr>
    <tr><td class="paramname">0</td><td>假 </td></tr>
  </table>
  </dd>
</dl>
<dl class="user"><dt><b>示例:</b></dt><dd><div class="fragment"><pre class="fragment">    <span class="comment">// 判断是否可以序列化</span>
    <span class="keywordflow">if</span> (<a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga8ad3457e9c3e3ab59804b27d70410a52" title="判断表是否可以序列化">sclnk_serialable</a>(&amp;head)) {
        <a class="code" href="group___xE5_x8D_x95_xE7_xAB_xAF_xE7_xBA_xBF_xE5_xBD_xA2_xE5_xBA_x8F_xE8_xA1_xA8.html#gab7b8f6f20db0f3e5681fd2184b1ae60c" title="type类型表头">slseq_head</a>(DATA*) seq;
        <span class="comment">// 分配序列缓存</span>
        DATA** buf = (DATA**)malloc(sizeof(DATA*) * list_cnt);
        <span class="comment">// 序列化</span>
        <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaee0c8704431a04be07dd7b7a4edc8baf" title="表的序列化">sclnk_serialize</a>(&amp;head, buf, DATA, node);
        <a class="code" href="group___xE5_x8D_x95_xE7_xAB_xAF_xE7_xBA_xBF_xE5_xBD_xA2_xE5_xBA_x8F_xE8_xA1_xA8.html#ga08213d0c7bcf381b466b18e3822c6934" title="初始化序列">SLSEQ_INIT_SERIAL</a>(DATA*, &amp;seq, buf, list_cnt);
        <span class="comment">// 希尔排序</span>
        <a class="code" href="group___xE5_x8D_x95_xE7_xAB_xAF_xE7_xBA_xBF_xE5_xBD_xA2_xE5_xBA_x8F_xE8_xA1_xA8.html#ga197b786747dc3c95744f2bf8060b36ad" title="希尔排序">slseq_shell_sort</a>(DATA*, <a class="code" href="group___xE5_x8D_x95_xE7_xAB_xAF_xE7_xBA_xBF_xE5_xBD_xA2_xE5_xBA_x8F_xE8_xA1_xA8.html#ga2696503718b3292109d395da44c988b6" title="得到指向正向起始位置的迭代器">slseq_begin</a>(&amp;seq), 
            <a class="code" href="group___xE5_x8D_x95_xE7_xAB_xAF_xE7_xBA_xBF_xE5_xBD_xA2_xE5_xBA_x8F_xE8_xA1_xA8.html#ga5b3212d3b18809e193c701f7c6fef755" title="得到指向正向终止位置的迭代器">slseq_end</a>(&amp;seq), DATA_Greater);
        <span class="comment">// 反序列化</span>
        <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga458a15d62ffdc2897c44c9d98f2f4ec2" title="表的反序列化">sclnk_deserialize</a>(&amp;head, buf, list_cnt, DATA, node);
        <span class="comment">// 释放缓存</span>
        free(buf);
    }
</pre></div> </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00197">197</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga6655e61e67c2f0cd0206fdd22af55948"></a><!-- doxytag: member="sclnk.h::sclnk_link" ref="ga6655e61e67c2f0cd0206fdd22af55948" args="(sclnk_iter prev, sclnk_iter next)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline void sclnk_link </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>prev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>next</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>链接两个节点 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">prev</td><td>前驱节点 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">next</td><td>后继节点 </td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>注解:</b></dt><dd>链接prev和next节点 </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00209">209</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga77475af7dbf05e051e3c9ca17b7b9603"></a><!-- doxytag: member="sclnk.h::sclnk_insert_between" ref="ga77475af7dbf05e051e3c9ca17b7b9603" args="(sclnk_node *newly, sclnk_iter prev, sclnk_iter next)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline void sclnk_insert_between </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_node</a> *&#160;</td>
          <td class="paramname"><em>newly</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>prev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>next</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>在两个节点之间插入一个新节点 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">newly</td><td>新节点 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">prev</td><td>前驱节点 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">next</td><td>后继节点 </td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>注解:</b></dt><dd>将newly节点插入到prev和next节点之间。如果prev和next不是相邻节点， 则newly将替换掉prev和next之间的所有节点 </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00227">227</a>行定义。</p>

</div>
</div>
<a class="anchor" id="gae9ad1a2d64fe73b2a3413b2c4c18b1b3"></a><!-- doxytag: member="sclnk.h::sclnk_insert" ref="gae9ad1a2d64fe73b2a3413b2c4c18b1b3" args="(sclnk_iter prev, sclnk_iter pos, sclnk_node *newly)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline void sclnk_insert </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>prev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>pos</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_node</a> *&#160;</td>
          <td class="paramname"><em>newly</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>插入节点到指定位置 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">prev</td><td>pos的前驱节点 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">pos</td><td>插入位置 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">newly</td><td>新节点 </td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>注解:</b></dt><dd>将newly节点插入到pos的位置上，pos是从表头开始的位置 </dd></dl>
<dl class="user"><dt><b>示例:</b></dt><dd><div class="fragment"><pre class="fragment">    <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> pp = <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga0329e054c0783dac4ce6263ab83d72e1" title="根据正向索引得到迭代器">sclnk_at</a>(&amp;head, 7);
    <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> pos = pp-&gt;<a class="code" href="struct____sclnk__node.html#a000a5cc174c66223aacee1b9c6bb90b2" title="后继节点">next</a>;
    DATA* p = (DATA*)malloc(<span class="keyword">sizeof</span>(DATA));
    <span class="comment">// 将p节点插入到pos所在的位置</span>
    <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gae9ad1a2d64fe73b2a3413b2c4c18b1b3" title="插入节点到指定位置">sclnk_insert</a>(pp, pos, &amp;p-&gt;node);
</pre></div> </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00266">266</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga4d8971bd97261a9c6886b68eba5fffc7"></a><!-- doxytag: member="sclnk.h::sclnk_erase" ref="ga4d8971bd97261a9c6886b68eba5fffc7" args="(sclnk_iter prev, sclnk_iter entry)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline void sclnk_erase </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>prev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>entry</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>擦除节点 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">prev</td><td>目标节点前驱 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">entry</td><td>目标节点 </td></tr>
  </table>
  </dd>
</dl>
<dl class="user"><dt><b>示例:</b></dt><dd><div class="fragment"><pre class="fragment">    <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> p = <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gad3d804bd815b92b46f12e2e1703e5b8c" title="得到指向正向起始位置前驱的迭代器">sclnk_pbegin</a>(&amp;head);
    <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> e = <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga8488bd60be74a89d6b7f887f534a5408" title="得到指向正向终止位置的迭代器">sclnk_end</a>(&amp;head);
    <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> i = <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga462c5c4621c938c4f4b118ddbc5f0963" title="得到指向正向起始位置的迭代器">sclnk_begin</a>(&amp;head);
    <span class="keywordflow">while</span> (i != e) {
        <span class="keywordflow">if</span> (is_bad_data(container_of(i, DATA, node)))
            <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga4d8971bd97261a9c6886b68eba5fffc7" title="擦除节点">sclnk_erase</a>(p, <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga0ae905a556af3efe6a608b57a8ff9c94" title="迭代器后自增">sclnk_inc_later</a>(i));
        <span class="keywordflow">else</span>
            <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga6d3c931e93fa85e8d647bfc2525fc134" title="迭代器递增，并更新前驱迭代器">sclnk_prev_inc</a>(p, i);
    }
</pre></div> </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00290">290</a>行定义。</p>

</div>
</div>
<a class="anchor" id="gae897271833920bf21c614fe0365698d0"></a><!-- doxytag: member="sclnk.h::sclnk_erases" ref="gae897271833920bf21c614fe0365698d0" args="(sclnk_iter bprev, sclnk_iter begin, sclnk_iter end, sclnk_pr1 erase_handler)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline void sclnk_erases </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>bprev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>begin</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>end</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaf2a36f248bc34b1d960ff647cc806270">sclnk_pr1</a>&#160;</td>
          <td class="paramname"><em>erase_handler</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>清空区域 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bprev</td><td>区域起始位置前驱 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">begin</td><td>区域起始位置 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">end</td><td>区域终止位置 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">erase_handler</td><td>移除响应函数，通常用于监视和释放节点，可以传递NULL, 表示不为删除的节点调用响应来处理 </td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>注解:</b></dt><dd>函数会为每一个被移除的节点调用erase_handler来处理节点 </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00313">313</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga1b14e4e39781624881131b8b5016a205"></a><!-- doxytag: member="sclnk.h::sclnk_clear" ref="ga1b14e4e39781624881131b8b5016a205" args="(sclnk_head *head, sclnk_pr1 erase_handler)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline void sclnk_clear </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>head</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaf2a36f248bc34b1d960ff647cc806270">sclnk_pr1</a>&#160;</td>
          <td class="paramname"><em>erase_handler</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>清空表 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">head</td><td>表头 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">erase_handler</td><td>移除响应函数，通常用于监视和释放节点，可以传递NULL, 表示不为删除的节点调用响应来处理 </td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>注解:</b></dt><dd>函数会为每一个被移除的节点调用erase_handler来处理节点 </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00329">329</a>行定义。</p>

</div>
</div>
<a class="anchor" id="gaa84a7be161740782cf22977fad04db0b"></a><!-- doxytag: member="sclnk.h::sclnk_push_front" ref="gaa84a7be161740782cf22977fad04db0b" args="(sclnk_head *head, sclnk_node *newly)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline void sclnk_push_front </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>head</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_node</a> *&#160;</td>
          <td class="paramname"><em>newly</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>在表首添加节点 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">head</td><td>表头 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">newly</td><td>新节点 </td></tr>
  </table>
  </dd>
</dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00340">340</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga739b0099ea2a0a43019d9e9df676cf2c"></a><!-- doxytag: member="sclnk.h::sclnk_pop_front" ref="ga739b0099ea2a0a43019d9e9df676cf2c" args="(sclnk_head *head)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline void sclnk_pop_front </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>head</em></td><td>)</td>
          <td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>移除表首节点 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">head</td><td>表头 </td></tr>
  </table>
  </dd>
</dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00350">350</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga80f9d833c31b2ef13a5ad913e1097cf6"></a><!-- doxytag: member="sclnk.h::sclnk_splice_between" ref="ga80f9d833c31b2ef13a5ad913e1097cf6" args="(sclnk_iter prev, sclnk_iter next, sclnk_iter first_prev, sclnk_iter first, sclnk_iter last, sclnk_iter last_next)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline void sclnk_splice_between </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>prev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>next</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>first_prev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>first</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>last</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>last_next</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>在两个节点之间插入多个连续节点 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">prev</td><td>前驱节点 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">next</td><td>后继节点 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">first_prev</td><td>首节点的前驱节点 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">first</td><td>首节点 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">last</td><td>尾节点 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">last_next</td><td>尾节点的后继节点 </td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>注解:</b></dt><dd>将从first至last的节点嫁接到prev和next之间。如果prev和next之间有节点， 则它们之间的节点将会被替换 </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00370">370</a>行定义。</p>

</div>
</div>
<a class="anchor" id="gae76bde8fdf6caa919f7f0e5d16ecc564"></a><!-- doxytag: member="sclnk.h::sclnk_splice" ref="gae76bde8fdf6caa919f7f0e5d16ecc564" args="(sclnk_iter prev, sclnk_iter pos, sclnk_iter first_prev, sclnk_iter first, sclnk_iter last)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline void sclnk_splice </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>prev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>pos</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>first_prev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>first</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>last</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>在两个节点之间插入多个连续节点 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">prev</td><td>pos的前驱节点 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">pos</td><td>插入位置 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">first_prev</td><td>首节点的前驱节点 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">first</td><td>首节点 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">last</td><td>尾节点 </td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>注解:</b></dt><dd>将从first至last的节点嫁接到pos位置。可以跨链表移动 </dd></dl>
<dl class="user"><dt><b>示例:</b></dt><dd><div class="fragment"><pre class="fragment">    <span class="comment">// 将a链表的节点全部嫁接到b链表</span>
    <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gae76bde8fdf6caa919f7f0e5d16ecc564" title="在两个节点之间插入多个连续节点">sclnk_splice</a>(bprev, b, a, <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga9997297a01740b60bead4d685050dbf1" title="得到表首节点">sclnk_front</a>(a), sclnk_back(b));
    <span class="comment">// 将b到e的节点们移动到第4个节点的位置</span>
    <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gae76bde8fdf6caa919f7f0e5d16ecc564" title="在两个节点之间插入多个连续节点">sclnk_splice</a>(<a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga0329e054c0783dac4ce6263ab83d72e1" title="根据正向索引得到迭代器">sclnk_at</a>(head, 2), <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga0329e054c0783dac4ce6263ab83d72e1" title="根据正向索引得到迭代器">sclnk_at</a>(head, 3), bprev, b, e);
</pre></div> </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00405">405</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga4c2368c8b739c616e4a31cdb70e0f109"></a><!-- doxytag: member="sclnk.h::sclnk_count" ref="ga4c2368c8b739c616e4a31cdb70e0f109" args="(sclnk_head *head)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">NV_API size_t sclnk_count </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>head</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>统计表的节点数量 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">head</td><td>表头 </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>返回:</b></dt><dd>size_t 返回表的节点总数 </dd></dl>

<p>在文件<a class="el" href="sclnk_8c_source.html">sclnk.c</a>第<a class="el" href="sclnk_8c_source.html#l00095">95</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga0d3b25cd83d8ae088a5a052be9a19c90"></a><!-- doxytag: member="sclnk.h::sclnk_distance" ref="ga0d3b25cd83d8ae088a5a052be9a19c90" args="(sclnk_iter first, sclnk_iter last)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">NV_API size_t sclnk_distance </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>first</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>last</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>计算两个节点的迭代距离 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">first</td><td>首节点 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">last</td><td>尾节点 </td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>注解:</b></dt><dd>以索引为例，2到4的距离是4 (4-2+1=3) </dd></dl>
<dl class="return"><dt><b>返回:</b></dt><dd>size_t 返回距离 </dd></dl>

<p>在文件<a class="el" href="sclnk_8c_source.html">sclnk.c</a>第<a class="el" href="sclnk_8c_source.html#l00083">83</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga4f486152712faaff0fd27a48f3ea3e50"></a><!-- doxytag: member="sclnk.h::sclnk_advance" ref="ga4f486152712faaff0fd27a48f3ea3e50" args="(sclnk_head *head, sclnk_iter cur, size_t dist)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">NV_API <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> sclnk_advance </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>head</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>cur</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>dist</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>给迭代器增加一段距离或减小一段距离 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">head</td><td>表头 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">cur</td><td>迭代器 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dist</td><td>增加的距离。正数时，表示增加；负数时，表示减小 </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>返回:</b></dt><dd>sclnk_iter 返回新迭代器 </dd></dl>

<p>在文件<a class="el" href="sclnk_8c_source.html">sclnk.c</a>第<a class="el" href="sclnk_8c_source.html#l00115">115</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga0329e054c0783dac4ce6263ab83d72e1"></a><!-- doxytag: member="sclnk.h::sclnk_at" ref="ga0329e054c0783dac4ce6263ab83d72e1" args="(sclnk_head *head, const size_t index)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> sclnk_at </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>head</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>index</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>根据正向索引得到迭代器 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">head</td><td>表头 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>索引，从0开始 </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>返回:</b></dt><dd>sclnk_iter 返回对应的迭代器 </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00446">446</a>行定义。</p>

</div>
</div>
<a class="anchor" id="gaba18db2b0803f2dc314109f95266e92a"></a><!-- doxytag: member="sclnk.h::sclnk_index_of" ref="gaba18db2b0803f2dc314109f95266e92a" args="(sclnk_head *head, sclnk_iter itr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">NV_API size_t sclnk_index_of </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>head</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>itr</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>计算迭代器的正向索引 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">head</td><td>表头 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">itr</td><td>迭代器 </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>返回:</b></dt><dd>size_t 返回索引 </dd></dl>

<p>在文件<a class="el" href="sclnk_8c_source.html">sclnk.c</a>第<a class="el" href="sclnk_8c_source.html#l00123">123</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga2aecfe697f1a6d22106200dd3c1bc72b"></a><!-- doxytag: member="sclnk.h::sclnk_node_init" ref="ga2aecfe697f1a6d22106200dd3c1bc72b" args="(sclnk_node *entry)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline void sclnk_node_init </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_node</a> *&#160;</td>
          <td class="paramname"><em>entry</em></td><td>)</td>
          <td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>初始化节点 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">entry</td><td>节点 </td></tr>
  </table>
  </dd>
</dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00465">465</a>行定义。</p>

</div>
</div>
<a class="anchor" id="gaf8090f7bf0fb7bb21cc80ba7343c1338"></a><!-- doxytag: member="sclnk.h::sclnk_iter_replace" ref="gaf8090f7bf0fb7bb21cc80ba7343c1338" args="(sclnk_node *vprev, sclnk_node *victim, sclnk_node *newly)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline void sclnk_iter_replace </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_node</a> *&#160;</td>
          <td class="paramname"><em>vprev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_node</a> *&#160;</td>
          <td class="paramname"><em>victim</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_node</a> *&#160;</td>
          <td class="paramname"><em>newly</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>用新节点替换目标节点 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">vprev</td><td>目标节点前驱 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">victim</td><td>受害目标节点 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">newly</td><td>新节点 </td></tr>
  </table>
  </dd>
</dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00478">478</a>行定义。</p>

</div>
</div>
<a class="anchor" id="gaaa9af21e07666138c54ee42af045b928"></a><!-- doxytag: member="sclnk.h::sclnk_iter_swap" ref="gaaa9af21e07666138c54ee42af045b928" args="(sclnk_iter aprev, sclnk_iter a, sclnk_iter bprev, sclnk_iter b)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline void sclnk_iter_swap </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>aprev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>bprev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>b</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>交换两个节点 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">aprev</td><td>第一个节点前驱 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">a</td><td>第一个节点 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">bprev</td><td>第二个节点前驱 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">b</td><td>第二个节点 </td></tr>
  </table>
  </dd>
</dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00501">501</a>行定义。</p>

</div>
</div>
<a class="anchor" id="gaf5234e26dee066941c79e2af19e5dd54"></a><!-- doxytag: member="sclnk.h::sclnk_replace" ref="gaf5234e26dee066941c79e2af19e5dd54" args="(sclnk_head *victim, sclnk_iter vlast, sclnk_head *newly)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline void sclnk_replace </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>victim</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>vlast</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>newly</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>用新表头替换目标表头 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">victim</td><td>受害目标表头 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">vlast</td><td>目标表表尾节点 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">newly</td><td>新表头 </td></tr>
  </table>
  </dd>
</dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00515">515</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga6b4befe4157b371fc3e8d6d9edb9c9ea"></a><!-- doxytag: member="sclnk.h::sclnk_swap" ref="ga6b4befe4157b371fc3e8d6d9edb9c9ea" args="(sclnk_head *a, sclnk_head *alast, sclnk_head *b, sclnk_head *blast)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline void sclnk_swap </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>alast</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>b</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>blast</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>交换两个表头 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">a</td><td>第一个表头 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">alast</td><td>第一个表尾节点 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">b</td><td>第二个表头 </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">alast</td><td>第二个表尾节点 </td></tr>
  </table>
  </dd>
</dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00549">549</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga26cc730daad81c94fae84637b5ea11c2"></a><!-- doxytag: member="sclnk.h::sclnk_exist" ref="ga26cc730daad81c94fae84637b5ea11c2" args="(sclnk_head *head, sclnk_iter itr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline int sclnk_exist </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>head</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>itr</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>判断一个节点是否存在于表中 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">head</td><td>表头 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">itr</td><td>目标节点 </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>返回:</b></dt><dd>int 返回结果 </dd></dl>
<dl><dt><b>返回值:</b></dt><dd>
  <table class="retval">
    <tr><td class="paramname">1</td><td>真 </td></tr>
    <tr><td class="paramname">0</td><td>假 </td></tr>
  </table>
  </dd>
</dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00564">564</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga9997297a01740b60bead4d685050dbf1"></a><!-- doxytag: member="sclnk.h::sclnk_front" ref="ga9997297a01740b60bead4d685050dbf1" args="(sclnk_head *head)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> sclnk_front </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>head</em></td><td>)</td>
          <td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>得到表首节点 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">head</td><td>表头 </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>返回:</b></dt><dd>sclnk_iter 返回表首节点 </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00575">575</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga462c5c4621c938c4f4b118ddbc5f0963"></a><!-- doxytag: member="sclnk.h::sclnk_begin" ref="ga462c5c4621c938c4f4b118ddbc5f0963" args="(sclnk_head *head)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> sclnk_begin </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>head</em></td><td>)</td>
          <td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>得到指向正向起始位置的迭代器 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">head</td><td>表头 </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>返回:</b></dt><dd>sclnk_iter 返回迭代器 </dd></dl>
<dl class="user"><dt><b>示例:</b></dt><dd><div class="fragment"><pre class="fragment">    <span class="comment">// 遍历链表</span>
    <span class="keywordtype">int</span> index = 0;
    <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> e = <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga8488bd60be74a89d6b7f887f534a5408" title="得到指向正向终止位置的迭代器">sclnk_end</a>(&amp;head);
    <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> i = <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga462c5c4621c938c4f4b118ddbc5f0963" title="得到指向正向起始位置的迭代器">sclnk_begin</a>(&amp;head);
    <span class="keywordflow">while</span> (i != e) {
        printf(<span class="stringliteral">&quot;[%d]=%d\n&quot;</span>, index++, owner_of(i, DATA, node).data);
        <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga3c63ec804c220dc76dc32687212c2bb9" title="迭代器递增">sclnk_inc</a>(i);
    }
</pre></div> </dd></dl>
<dl class="see"><dt><b>参见:</b></dt><dd><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga8488bd60be74a89d6b7f887f534a5408" title="得到指向正向终止位置的迭代器">sclnk_end</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gad3d804bd815b92b46f12e2e1703e5b8c" title="得到指向正向起始位置前驱的迭代器">sclnk_pbegin</a> </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00598">598</a>行定义。</p>

</div>
</div>
<a class="anchor" id="gad3d804bd815b92b46f12e2e1703e5b8c"></a><!-- doxytag: member="sclnk.h::sclnk_pbegin" ref="gad3d804bd815b92b46f12e2e1703e5b8c" args="(sclnk_head *head)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> sclnk_pbegin </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>head</em></td><td>)</td>
          <td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>得到指向正向起始位置前驱的迭代器 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">head</td><td>表头 </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>返回:</b></dt><dd>sclnk_iter 返回迭代器 </dd></dl>
<dl class="user"><dt><b>示例:</b></dt><dd><div class="fragment"><pre class="fragment">    <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> p = <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gad3d804bd815b92b46f12e2e1703e5b8c" title="得到指向正向起始位置前驱的迭代器">sclnk_pbegin</a>(&amp;head);
    <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> e = <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga8488bd60be74a89d6b7f887f534a5408" title="得到指向正向终止位置的迭代器">sclnk_end</a>(&amp;head);
    <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> i = <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga462c5c4621c938c4f4b118ddbc5f0963" title="得到指向正向起始位置的迭代器">sclnk_begin</a>(&amp;head);
    <span class="keywordflow">while</span> (i != e) {
        <span class="keywordflow">if</span> (is_bad_data(container_of(i, DATA, node)))
            <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga4d8971bd97261a9c6886b68eba5fffc7" title="擦除节点">sclnk_erase</a>(p, <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga0ae905a556af3efe6a608b57a8ff9c94" title="迭代器后自增">sclnk_inc_later</a>(i));
        <span class="keywordflow">else</span>
            <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga6d3c931e93fa85e8d647bfc2525fc134" title="迭代器递增，并更新前驱迭代器">sclnk_prev_inc</a>(p, i);
    }
</pre></div> </dd></dl>
<dl class="see"><dt><b>参见:</b></dt><dd><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga462c5c4621c938c4f4b118ddbc5f0963" title="得到指向正向起始位置的迭代器">sclnk_begin</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga8488bd60be74a89d6b7f887f534a5408" title="得到指向正向终止位置的迭代器">sclnk_end</a> </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00622">622</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga8488bd60be74a89d6b7f887f534a5408"></a><!-- doxytag: member="sclnk.h::sclnk_end" ref="ga8488bd60be74a89d6b7f887f534a5408" args="(sclnk_head *head)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> sclnk_end </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>head</em></td><td>)</td>
          <td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>得到指向正向终止位置的迭代器 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">head</td><td>表头 </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>返回:</b></dt><dd>sclnk_iter 返回迭代器 </dd></dl>
<dl class="see"><dt><b>参见:</b></dt><dd><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga462c5c4621c938c4f4b118ddbc5f0963" title="得到指向正向起始位置的迭代器">sclnk_begin</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gad3d804bd815b92b46f12e2e1703e5b8c" title="得到指向正向起始位置前驱的迭代器">sclnk_pbegin</a> </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00634">634</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga1a649a7d0d8926f3ca47111a6f03333f"></a><!-- doxytag: member="sclnk.h::sclnk_end_of" ref="ga1a649a7d0d8926f3ca47111a6f03333f" args="(sclnk_iter itr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> sclnk_end_of </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>itr</em></td><td>)</td>
          <td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>得到当前迭代器的正向终止位置 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">itr</td><td>迭代器 </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>返回:</b></dt><dd>sclnk_iter 返回迭代器 </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00645">645</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga3c4203f3e474bfef4705505c047047f2"></a><!-- doxytag: member="sclnk.h::sclnk_next" ref="ga3c4203f3e474bfef4705505c047047f2" args="(sclnk_iter itr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> sclnk_next </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_iter</a>&#160;</td>
          <td class="paramname"><em>itr</em></td><td>)</td>
          <td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>得到当前节点的后继节点 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">itr</td><td>当前节点 </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>返回:</b></dt><dd>sclnk_iter 返回后继节点 </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00656">656</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga33ab0148a458bbc3a45d9ab58b3af75b"></a><!-- doxytag: member="sclnk.h::sclnk_vbegin" ref="ga33ab0148a458bbc3a45d9ab58b3af75b" args="(sclnk_head *head)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> sclnk_vbegin </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>head</em></td><td>)</td>
          <td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>得到用于反转的起始位置的迭代器 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">head</td><td>表头 </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>返回:</b></dt><dd>sclnk_iter 返回迭代器 </dd></dl>
<dl class="user"><dt><b>示例:</b></dt><dd><div class="fragment"><pre class="fragment">    <span class="comment">// 反转表</span>
    <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> ve = <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga7c89eff8cd82862599fea6c9eb460836" title="得到用于反转的终止位置的迭代器">sclnk_vend</a>(&amp;head);
    <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> vi = <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga33ab0148a458bbc3a45d9ab58b3af75b" title="得到用于反转的起始位置的迭代器">sclnk_vbegin</a>(&amp;head);
    <span class="keywordflow">while</span> (vi != ve) {
        <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaa2764d0d3c341ee6915de4c6e50c4081" title="入栈反转">sclnk_vpush</a>(&amp;head, vi);
    }
</pre></div> </dd></dl>
<dl class="see"><dt><b>参见:</b></dt><dd><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga7c89eff8cd82862599fea6c9eb460836" title="得到用于反转的终止位置的迭代器">sclnk_vend</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaa2764d0d3c341ee6915de4c6e50c4081" title="入栈反转">sclnk_vpush</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga29a3829d5949bdecbc4d9911d0136c75" title="反转表">sclnk_reverse</a> </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00758">758</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga7c89eff8cd82862599fea6c9eb460836"></a><!-- doxytag: member="sclnk.h::sclnk_vend" ref="ga7c89eff8cd82862599fea6c9eb460836" args="(sclnk_head *head)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static inline <a class="el" href="struct____sclnk__node.html">sclnk_iter</a> sclnk_vend </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>head</em></td><td>)</td>
          <td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>得到用于反转的终止位置的迭代器 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">head</td><td>表头 </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>返回:</b></dt><dd>sclnk_iter 返回迭代器 </dd></dl>
<dl class="user"><dt><b>示例:</b></dt><dd><div class="fragment"><pre class="fragment">    <span class="comment">// 反转表</span>
    <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> ve = <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga7c89eff8cd82862599fea6c9eb460836" title="得到用于反转的终止位置的迭代器">sclnk_vend</a>(&amp;head);
    <a class="code" href="struct____sclnk__node.html" title="单向环形链表节点">sclnk_iter</a> vi = <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga33ab0148a458bbc3a45d9ab58b3af75b" title="得到用于反转的起始位置的迭代器">sclnk_vbegin</a>(&amp;head);
    <span class="keywordflow">while</span> (vi != ve) {
        <a class="code" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaa2764d0d3c341ee6915de4c6e50c4081" title="入栈反转">sclnk_vpush</a>(&amp;head, vi);
    }
</pre></div> </dd></dl>
<dl class="see"><dt><b>参见:</b></dt><dd><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga33ab0148a458bbc3a45d9ab58b3af75b" title="得到用于反转的起始位置的迭代器">sclnk_vbegin</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaa2764d0d3c341ee6915de4c6e50c4081" title="入栈反转">sclnk_vpush</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga29a3829d5949bdecbc4d9911d0136c75" title="反转表">sclnk_reverse</a> </dd></dl>

<p>在文件<a class="el" href="sclnk_8h_source.html">sclnk.h</a>第<a class="el" href="sclnk_8h_source.html#l00779">779</a>行定义。</p>

</div>
</div>
<a class="anchor" id="ga29a3829d5949bdecbc4d9911d0136c75"></a><!-- doxytag: member="sclnk.h::sclnk_reverse" ref="ga29a3829d5949bdecbc4d9911d0136c75" args="(sclnk_head *head)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">NV_API void sclnk_reverse </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct____sclnk__node.html">sclnk_head</a> *&#160;</td>
          <td class="paramname"><em>head</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>反转表 </p>
<dl><dt><b>参数:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">head</td><td>表头 </td></tr>
  </table>
  </dd>
</dl>
<dl class="see"><dt><b>参见:</b></dt><dd><a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga33ab0148a458bbc3a45d9ab58b3af75b" title="得到用于反转的起始位置的迭代器">sclnk_vbegin</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#ga7c89eff8cd82862599fea6c9eb460836" title="得到用于反转的终止位置的迭代器">sclnk_vend</a>, <a class="el" href="group___xE5_x8D_x95_xE5_x90_x91_xE7_x8E_xAF_xE5_xBD_xA2_xE9_x93_xBE_xE8_xA1_xA8.html#gaa2764d0d3c341ee6915de4c6e50c4081" title="入栈反转">sclnk_vpush</a> </dd></dl>

<p>在文件<a class="el" href="sclnk_8c_source.html">sclnk.c</a>第<a class="el" href="sclnk_8c_source.html#l00108">108</a>行定义。</p>

</div>
</div>
</div>
<!--- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>全部</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>数据结构</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>文件</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>函数</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>变量</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>类型定义</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>宏定义</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<hr class="footer"/><address class="footer"><small>Generated at 2015年七月16日 星期四 12:00:41 for Navo Portable Library by&#160;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.3 </small></address>
</body>
</html>
